
#include <time.h>
#define _CRT_SECURE_NO_WARNINGS
#include "athlete.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "time_func.h"



#pragma once
#define time_file_path "time.txt"
#define ATHLETETXT "athlete.txt"
#define collgeTXT "collge.txt"
#define gamesTXT "games.txt"
typedef struct {
    int project_id;
    int score;
    int status_code;
    char student_id[20];
} Athlete;
typedef struct Game {
    char name[10];
    int code;     // 比赛项目代码
    char type[20];  // 项目性质 “青年本科男子”
    int num;
    char group[8]; // 集体或个人
}Game;

// 使用项目比赛代码获取比赛名
int getGameNameByCode(int code, char* name) {
    FILE* game_file = fopen(gamesTXT, "r");
    if (game_file == NULL) {
        printf("文件打开失败\n");
        return -1;
    }

    Game game[50];
    int i = 0;
    while (fscanf(game_file, "%s %d %s %d %s", game[i].name, &game[i].code, game[i].type, &game[i].num, game[i].group) == 5) {
        i++;
    }

    fclose(game_file);

    for (int j = 0; j < i; j++) {
        if (game[j].code == code) {
            strcpy(name, game[j].name);  // 复制项目名称
            return 1;
        }
    }
    return 0; // 没找到比赛项目，返回0
}

// 复用上面那个函数而已
int isGameExist(int code) {
    char name[50];
    if (getGameNameByCode(code, name) == 1) {
        return 1; // 找到了比赛项目
    }
    return 0; // 没找到比赛项目，返回0
}

// 增加一个新的项目
void creatGame(Game game) {
    if (isGameExist(game.code) == 1) {
        printf("该项目或编号已存在，请勿重复添加！\n");
        return;
    }
    FILE* game_file = fopen("d:\\project\\games.txt", "a");

    if (game_file == NULL) {
        printf("文件打开失败\n");
        return;
    }

    fprintf(game_file, "%s %d %s %d %s\n", game.name, game.code, game.type, game.num, game.group);

    fclose(game_file);

    printf("项目添加成功！\n\n");
}

// 删除一个项目
void deleteGame(int code) {
    if (isGameExist(code) == 0) {
        printf("该项目不存在，请检查输入！\n");
        return;
    }
    FILE* file = fopen("d:\\project\\games.txt", "r");
    if (file == NULL) {
        printf("无法打开文件！\n");
        return;
    }

    Game game[50];
    int i = 0;
    while (1) {
        int j = fscanf(file, "%s %d %s %d %s", game[i].name, &game[i].code, game[i].type, &game[i].num, game[i].group);
        if (j == EOF) {
            break;
        }
        if (game[i].code == code) {
            continue;
        }
        i++;
    }
    fclose(file); // 添加关闭文件

    FILE* file2 = fopen("d:\\project\\games.txt", "w");
    if (file2 == NULL) {
        printf("无法重写文件！\n");
        return;
    }
    for (int j = 0; j < i; j++) {
        fprintf(file2, "%s %d %s %d %s\n", game[j].name, game[j].code, game[j].type, game[j].num, game[j].group);
    }
    fclose(file2); // 添加关闭文件
    printf("项目删除成功！\n\n");
}

// 修改一个项目 (号码不可修改)
void modifyGame(Game game) {
    if (isGameExist(game.code) == 0) {
        printf("该项目不存在，请检查输入！\n");
        return;
    }
    FILE* file = fopen("d:\\project\\games.txt", "r");
    if (file == NULL) {
        printf("无法打开文件！\n");
        return;
    }

    Game game_new[50];
    int i = 0;
    while (1) {
        int j = fscanf(file, "%s %d %s %d %s", game_new[i].name, &game_new[i].code, game_new[i].type, &game_new[i].num, game_new[i].group);
        if (j == EOF) {
            break;
        }
        if (game_new[i].code == game.code) {
            game_new[i] = game;
        }
        i++;
    }
    fclose(file); // 添加关闭文件

    FILE* file2 = fopen("d:\\project\\games.txt", "w");
    if (file2 == NULL) {
        printf("无法重写文件！\n");
        return;
    }
    for (int j = 0; j < i; j++) {
        fprintf(file2, "%s %d %s %d %s\n", game_new[j].name, game_new[j].code, game_new[j].type, game_new[j].num, game_new[j].group);
    }
    fclose(file2); // 添加关闭文件
    printf("项目修改成功！\n\n");
}

// 查询所有项目
void printAllGame() {
    FILE* file = fopen("d:\\project\\games.txt", "r");
    if (file == NULL) {
        printf("无法打开文件！\n");
        return;
    }

    Game game[50];
    int i = 0;
    while (1) {
        int j = fscanf(file, "%s %d %s %d %s", game[i].name, &game[i].code, game[i].type, &game[i].num, game[i].group);
        if (j == EOF) {
            break;
        }
        i++;
    }
    fclose(file); // 添加关闭文件

    printf("%-10s\t%-10s\t%-10s\t%-15s\t%-10s\n", "项目代码", "项目名称", "项目人数", "项目性质", "项目组别");
    for (int j = 0; j < i; j++) {
        printf("%-10d\t%-10s\t%-10d\t%-15s\t%-10s\n",
            game[j].code,
            game[j].name,
            game[j].num,
            game[j].type,
            game[j].group);
    }
    printf("\n");
}

// 查询某个特定项目
void queryGame(int code) {
    FILE* file = fopen("d:\\project\\games.txt", "r");
    if (file == NULL) {
        printf("无法打开文件！\n");
        return;
    }

    Game game[50];
    int i = 0;
    while (1) {
        int j = fscanf(file, "%s %d %s %d %s", game[i].name, &game[i].code, game[i].type, &game[i].num, game[i].group);
        if (j == EOF) {
            break;
        }
        if (game[i].code == code) {
            printf("此项目是：%s，共有%d名运动员。属于%s%s项目。\n\n", game[i].name,game[i].num, game[i].group, game[i].type);
            return;
        }
        i++;
    }
    fclose(file);
    printf("未找到该项目！\n");
}

// 修改状态码
void updateStatusCode(const char* studentId, int projectCode, int newStatus) {
    FILE* file = fopen("ATHLETETXT", "r");
    if (file == NULL) {
        printf("无法打开文件！\n");
        return;
    }

    // 存储所有运动员的数据
    char lines[100][100];
    int lineCount = 0;

    // 读取文件内容并保存到内存
    while (fgets(lines[lineCount], sizeof(lines[lineCount]), file) != NULL) {
        lineCount++;
    }
    fclose(file); // 关闭文件

    // 修改指定学号和项目代号的状态码
    for (int i = 0; i < lineCount; i++) {
        int fileProjectCode, score, statusCode;
        char currentStudentId[20];

        sscanf(lines[i], "%d %d %d %s", &fileProjectCode, &score, &statusCode, currentStudentId);

        if (strcmp(currentStudentId, studentId) == 0 && fileProjectCode == projectCode) {
            // 找到匹配的记录，修改状态码
            snprintf(lines[i], sizeof(lines[i]), "%d %d %d %s\n", fileProjectCode, score, newStatus, currentStudentId);
            break;
        }
    }

    // 将修改后的内容重新写入文件
    file = fopen("ATHLETETXT", "w");
    if (file == NULL) {
        printf("无法打开文件进行写入！\n");
        return;
    }

    for (int i = 0; i < lineCount; i++) {
        fprintf(file, "%s", lines[i]);
    }

    fclose(file); // 关闭文件

}

// 获取状态码
int getStatusCode(const char* studentId, int projectCode) {
    FILE* file = fopen("ATHLETETXT", "r");
    if (file == NULL) {
        printf("无法打开文件！\n");
        return -1; // 表示文件打开失败
    }

    char line[100];
    while (fgets(line, sizeof(line), file) != NULL) {
        int fileProjectCode, score, statusCode;
        char currentStudentId[20];

        // 使用 sscanf 提取数据
        sscanf(line, "%d %d %d %s", &fileProjectCode, &score, &statusCode, currentStudentId);

        // 检查学号和项目编号是否匹配
        if (strcmp(currentStudentId, studentId) == 0 && fileProjectCode == projectCode) {
            fclose(file); // 关闭文件
            return statusCode; // 返回对应的状态码
        }
    }

    fclose(file); // 关闭文件
    return -2; // 返回 -2 表示未找到对应的记录
}

// 判断运动员是否存在
int isAthleteExist(int sportCode, char* ID) {
    FILE* fp = fopen("athlete.txt", "r"); // 以读取模式打开文件
    if (fp == NULL) {
        printf("文件未找到\n");
        return 0; // 文件打开失败，返回0表示运动员不存在
    }

    char line[100];
    while (fgets(line, sizeof(line), fp) != NULL) {
        int fileSportCode, score, statusCode;
        char studentId[20];

        // 使用 sscanf 提取数据
        sscanf(line, "%d %d %d %s", &fileSportCode, &score, &statusCode, studentId);

        // 检查学号是否匹配
        if (strcmp(studentId, ID) == 0) {
            fclose(fp); // 关闭文件
            return 1; // 找到运动员，返回1表示存在
        }
    }

    fclose(fp); // 关闭文件
    return 0; // 没有找到运动员，返回0表示不存在
}

// 输入成绩
void inputResult_referee() {//ycna修改
    
    int result;
    char sportCode[20];
    int sportCode_int;
    char ID[20];
    int score;
    int statusCode=0;
    char *end;
    while (1) {
        printf("请输入运动类型代码、选手ID和成绩（输入'quit'停止输入）：\n");
        result=scanf("%s",sportCode);
        if (result!=1) {
            printf("Error1!!!");
        }
        if(strcmp(sportCode,"quit")==0){
            break;
        }
        sportCode_int = strtol(sportCode, &end, 10);
        if (*end != '\0') {
            printf("转换后仍有未处理的字符: %s\n", end);
        }
        
        result=scanf("%s",ID);
        if (result!=1) {
            printf("Error2!!!");
            printf("result=%d",&result);
            break;
        }
        result=scanf("%d",&score);
        if (result=!1) {
             printf("Error3!!!");
            printf("result=%d",&result);
            break;
        }
        if (isAthleteExist(sportCode_int, ID) == 1) {
            printf("运动员已存在\n");
            return; // 运动员已存在，不再添加
        }
        FILE* fp = fopen(ATHLETETXT, "a");
        if (fp == NULL) {
            printf("File not found");
            return;
        }
        fprintf(fp, "%d %d %d %s\n", sportCode_int, score, statusCode, ID);
        fflush(fp);
        printf("添加成功\n");
    }
}

// 按照项目编号查询
void queryByProjectCode(int projectCode) {
    if (isGameExist(projectCode) == 0) {
        printf("该项目不存在，请检查输入！\n");
        return;
    }

    FILE* fp = fopen("athlete.txt", "r"); // 以读取模式打开文件
    if (fp == NULL) {
        printf("文件未找到\n");
        return; // 文件打开失败，返回0表示运动员不存在
    }
    char line[100];

    char name[10];
    getGameNameByCode(projectCode, name);
    printf("项目名称：%s\n", name);
    printf("学工号\t\t成绩\n");
    while (fgets(line, sizeof(line), fp) != NULL) {
        int fileSportCode, score, statusCode;
        char studentId[20];

        // 使用 sscanf 提取数据
        sscanf(line, "%d %d %d %s", &fileSportCode, &score, &statusCode, studentId);

        // 检查项目编号是否匹配
        if (fileSportCode == projectCode) {
            // 根据学工号和分数的最大长度设置合适的宽度
            printf("%-10s\t%d\n", studentId, score); // 学工号宽度为10，左对齐
        }
    }


    fclose(fp); // 关闭文件
}


// 按照学院总分排序
typedef struct {
    char collegeCode[6]; // 学院代码
    int totalScore; // 总得分
} CollegeScore;

void calculateCollegeScores() {
    FILE* fp = fopen("ATHLETETXT", "r");
    if (fp == NULL) {
        perror("无法打开文件");
        return;
    }

    CollegeScore colleges[50]; // 存储各学院的得分
    int collegeCount = 0;
    char line[100];

    // 读取文件内容并计算得分
    while (fgets(line, sizeof(line), fp) != NULL) {
        int sportCode, score, statusCode;
        char studentId[20];

        // 使用 sscanf 提取数据
        sscanf(line, "%d %d %d %s", &sportCode, &score, &statusCode, studentId);

        // 获取学院代码（前5位）
        char colCode[6];
        strncpy(colCode, studentId, 5);
        colCode[5] = '\0'; // 添加字符串结束符

        // 查找学院是否已经存在
        int found = 0;
        for (int i = 0; i < collegeCount; i++) {
            if (strcmp(colleges[i].collegeCode, colCode) == 0) {
                colleges[i].totalScore += score; // 累加得分
                found = 1;
                break;
            }
        }

        // 如果学院不存在，则添加新学院
        if (!found) {
            strcpy(colleges[collegeCount].collegeCode, colCode);
            colleges[collegeCount].totalScore = score;
            collegeCount++;
        }
    }

    fclose(fp);

    // 对学院按总得分进行排序
    for (int i = 0; i < collegeCount - 1; i++) {
        for (int j = 0; j < collegeCount - i - 1; j++) {
            if (colleges[j].totalScore < colleges[j + 1].totalScore) {
                // 交换
                CollegeScore temp = colleges[j];
                colleges[j] = colleges[j + 1];
                colleges[j + 1] = temp;
            }
        }
    }

    // 打印学院得分排名，处理相同得分的情况
    printf("排名\t学院代码\t总得分\n");
    int currentRank = 1;
    for (int i = 0; i < collegeCount; i++) {
        // 输出当前排名
        if (i > 0 && colleges[i].totalScore == colleges[i - 1].totalScore) {
            // 如果与前一个学院的得分相同，当前排名不变
            printf("%d\t%s\t\t%d\n", currentRank, colleges[i].collegeCode, colleges[i].totalScore);
        }
        else {
            // 如果得分不同，更新当前排名
            currentRank = i + 1;
            printf("%d\t%s\t\t%d\n", currentRank, colleges[i].collegeCode, colleges[i].totalScore);
        }
    }
}

// 管理员审核
void adminReview() {
    FILE* file = fopen(ATHLETETXT, "r");
    if (file == NULL) {
        printf("无法打开文件！\n");
        return;
    }

    // 用于存储记录
    char lines[100][100];
    int lineCount = 0;

    // 读取文件内容
    char line[100];
    while (fgets(line, sizeof(line), file) != NULL) {
        int projectCode, score, statusCode;
        char studentId[20];
        sscanf(line, "%d %d %d %s", &projectCode, &score, &statusCode, studentId);

        // 状态码2表时等待管理员审核
        if (statusCode == 2) {
            char project_name[20];
            getGameNameByCode(projectCode, project_name);
            printf("比赛代号: %d, 比赛名：%s, 学号: %s ,得分: %d, \n", projectCode, project_name, studentId, score);

            char choice;
            printf("是否批准修改成绩? (y/n): ");
            scanf(" %c", &choice); // 使用空格跳过可能的换行符
            printf("\n");

            // 更新状态码
            if (choice == 'y' || choice == 'Y') {
                statusCode = 3;  // 批准，转裁判员审核
            }
            else {
                statusCode = 5;  // 拒绝，不修改
            }
        }

        // 将记录存储到数组中
        sprintf(lines[lineCount], "%d %d %d %s\n", projectCode, score, statusCode, studentId);
        lineCount++;
    }

    fclose(file); // 关闭读取的文件

    // 将记录写回文件
    file = fopen(ATHLETETXT, "w"); // 以写入模式打开文件
    if (file == NULL) {
        printf("无法打开文件进行写入！\n");
        return;
    }

    for (int i = 0; i < lineCount; i++) {
        fprintf(file, "%s", lines[i]); // 写入更新后的记录
    }

    fclose(file); // 关闭文件
    printf("所有审核请求已受理，暂无更多待审。\n");
}

// 裁判员审核通过,管理员更改数据
void adminChange() {
    FILE* file = fopen(time_file_path, "r");
    if (file == NULL) {
        printf("无法打开文件！\n");
        return;
    }

    // 用于存储记录
    char lines[100][100];
    int lineCount = 0;

    // 读取文件内容
    char line[100];
    while (fgets(line, sizeof(line), file) != NULL) {
        int projectCode, score, statusCode;
        char studentId[20];
        sscanf(line, "%d %d %d %s", &projectCode, &score, &statusCode, studentId);

        int newScore = 0;
        // 状态码4表时等待管理员改正
        if (statusCode == 4) {
            char project_name[20];
            getGameNameByCode(projectCode, project_name);
            printf("比赛代号: %d, 比赛名：%s, 学号: %s ,得分: %d, \n", projectCode, project_name, studentId, score);
            while (1) {
                printf("请输入修改后的成绩（0-9）: ");
                if (scanf("%d", &newScore) != 1) {
                    printf("无效输入，请输入一个数字！\n");
                    // 清空输入缓冲区
                    while (getchar() != '\n'); // 读取并丢弃输入直到换行符
                    continue; // 重新循环，等待有效输入
                }
                // 检查输入的成绩是否在有效范围内
                if (newScore < 0 || newScore > 9) {
                    printf("输入的成绩必须在0到9之间，请重新输入。\n");
                    continue; // 重新循环，等待有效输入
                }
                break;
            }
            printf("\n");
            statusCode = 6;  
        }

        // 将记录存储到数组中
        sprintf(lines[lineCount], "%d %d %d %s\n", projectCode, newScore, statusCode, studentId);
        lineCount++;
    }

    fclose(file); // 关闭读取的文件

    // 将记录写回文件
    file = fopen(ATHLETETXT, "w"); // 以写入模式打开文件
    if (file == NULL) {
        printf("无法打开文件进行写入！\n");
        return;
    }

    for (int i = 0; i < lineCount; i++) {
        fprintf(file, "%s", lines[i]); // 写入更新后的记录
    }

    fclose(file); // 关闭文件
    printf("所有请求已受理，暂无更多。\n");
}

typedef struct College {
    char code[6];    // 院系代码
    char name[50];   // 院系名称
} College;

// 检查院系是否存在
int collegeExists(const char* code) {
    FILE* file = fopen(collgeTXT, "r");
    if (file == NULL) {
        printf("无法打开文件！\n");
        return 0;
    }
    College college;
    while (fscanf(file, "%s %s", college.code, college.name) == 2) {
        if (strcmp(college.code, code) == 0) {
            fclose(file);
            return 1;  // 院系存在
        }
    }
    fclose(file);
    return 0;  // 院系不存在
}

// 增加一个新的院系
void addCollege(College college) {
    if (collegeExists(college.code)) {
        printf("院系已存在，无法添加！\n\n");
        return;
    }
    FILE* college_file = fopen(collgeTXT, "a");
    if (college_file == NULL) {
        printf("文件打开失败\n");
        return;
    }
    fprintf(college_file, "%s %s\n", college.code, college.name);
    fflush(college_file);
    fclose(college_file);
    printf("院系添加成功！\n\n");
}

// 删除一个院系
void deleteCollege(const char* code) {
    if (!collegeExists(code)) {
        printf("院系不存在，无法删除！\n\n");
        return;
    }
    FILE* file = fopen(collgeTXT, "r");
    if (file == NULL) {
        printf("无法打开文件！\n");
        return;
    }
    College colleges[50];
    int i = 0;
    while (fscanf(file, "%s %s", colleges[i].code, colleges[i].name) == 2) {
        if (strcmp(colleges[i].code, code) != 0) {
            i++; // 仅保留未被删除的院系
        }
    }
    fclose(file);

    // 重新写入文件
    file = fopen(collgeTXT, "w");
    if (file == NULL) {
        printf("无法重写文件！\n");
        return;
    }

    for (int j = 0; j < i; j++) {
        fprintf(file, "%s %s\n", colleges[j].code, colleges[j].name);
    }
    fflush(file);
    fclose(file);
    printf("院系删除成功！\n\n");
}

// 修改一个院系
void modifyCollege(College college) {
    if (!collegeExists(college.code)) {
        printf("院系不存在，无法修改！\n\n");
        return;
    }

    FILE* file = fopen(collgeTXT, "r");
    if (file == NULL) {
        printf("无法打开文件！\n");
        return;
    }

    College colleges[50];
    int i = 0;
    while (fscanf(file, "%s %s", colleges[i].code, colleges[i].name) == 2) {
        if (strcmp(colleges[i].code, college.code) == 0) {
            colleges[i] = college; // 修改院系信息
        }
        i++;
    }
    fclose(file);

    // 重新写入文件
    file = fopen(collgeTXT, "w");
    if (file == NULL) {
        printf("无法重写文件！\n");
        return;
    }

    for (int j = 0; j < i; j++) {
        fprintf(file, "%s %s\n", colleges[j].code, colleges[j].name);
    }
    fclose(file);
    printf("院系修改成功！\n\n");
}

// 查询所有院系
void printAllColleges() {
    FILE* file = fopen(collgeTXT, "r");
    if (file == NULL) {
        printf("无法打开文件！\n");
        return;
    }

    College colleges[50];
    int i = 0;
    while (fscanf(file, "%s %s", colleges[i].code, colleges[i].name) == 2) {
        i++;
    }
    fclose(file);

    printf("%-6s\t%-50s\n", "院系编码", "院系名称");
    for (int j = 0; j < i; j++) {
        printf("%-6s\t%-50s\n", colleges[j].code, colleges[j].name);
    }
    printf("\n");
}

// 查询特定院系//ycna修改
void queryCollege(const char* code) {
    FILE* file = fopen(collgeTXT, "r");
    if (file == NULL) {
        printf("无法打开文件！\n");
        return;
    }
    College college;
    if(code==NULL){
        printf("传入参数为空",code);
    }
    int result;
    while (fscanf(file, "%s %s", college.code, college.name) == 2) {
        // printf("查询的院系编码：%s，查询的院系名字：%s",college.code,college.name);
        result=strncmp(college.code, code,5);
        if (result==0) {
            printf("院系编码：%s，院系名称：%s\n\n", college.code, college.name);
            return;
        }
        // else {
        //     printf("result:%d",&result);
        // }
    }
    fclose(file);
    printf("未找到该院系！\n");
}

// 运动查看指定比赛项目具体名次得主情况。  此函数在运动员处，总管理员审核裁判员数据时调用
int compare(const void* a, const void* b) {
    return ((Athlete*)b)->score - ((Athlete*)a)->score; // 降序排序
}
void sort_athletes_by_score(int target_code) {
    FILE* file = fopen("ATHLETETXT", "r");
    if (file == NULL) {
        perror("无法打开文件");
        return;
    }

    Athlete athletes[100];   // 假设本文件最多 100 条记录
    int count = 0;
    char line[100];

    while (fgets(line, sizeof(line), file)) {
        int project_id, score, status_code;
        char student_id[20];

        // 更新 sscanf，读取新的字段 project_id
        if (sscanf(line, "%d %d %d %s", &project_id, &score, &status_code, student_id) != 4) {
            continue; // 确保成功读取四个字段
        }

        if (project_id == target_code && count < 100) {
            athletes[count].project_id = project_id;
            athletes[count].score = score;
            athletes[count].status_code = status_code;
            strcpy(athletes[count].student_id, student_id);
            count++;
        }
    }
    fclose(file);

    // 确保至少有一条记录可以排序
    if (count > 0) {
        // 排序
        qsort(athletes, count, sizeof(Athlete), compare);

        char name[20];
        getGameNameByCode(target_code, name);
        printf("\n---------- %s 比赛排名(代码：%d)----------\n", name, target_code);
        printf("名次\t学号\t\t得分\n");
        for (int i = 0; i < count; i++) {
            printf("%-5d\t%-10s\t%-10d\n", i + 1, athletes[i].student_id, athletes[i].score);
        }
    }
    else {
        printf("没有找到匹配的运动员记录。\n");
    }
}

// [不需要直接调用]  管理员审核裁判员上传的成绩，若审核不通过，需要删除对应的比赛数据.
#define file_path "ATHLETETXT"
void adminDeleteScores(int project_code_to_delete) {
    FILE* file, * temp_file;
    char line[100];   // 假定最多 100 条

    file = fopen(file_path, "r");
    if (file == NULL) {
        printf("无法打开文件！\n");
        return;
    }

    temp_file = fopen("temp.txt", "w");
    if (temp_file == NULL) {
        printf("无法创建临时文件！\n");
        fclose(file);
        return;
    }

    while (fgets(line, sizeof(line), file)) {
        int project_code;
        sscanf(line, "%d", &project_code); // 读取行首的项目代码
        if (project_code != project_code_to_delete) {
            fputs(line, temp_file); // 将不符合条件的行写入临时文件
        }
    }

    fclose(file);
    fclose(temp_file);

    // 将临时文件重命名为原文件
    remove(file_path); // 删除原文件
    rename("temp.txt", file_path); // 重命名临时文件为原文件名
}

// 管理员审核裁判员上传的数据


void adminReviewScores() {
    FILE* file;
    int project_code, time_info, status_code;

    // 打开 time.txt 文件
    file = fopen(time_file_path, "r");
    if (file == NULL) {
        printf("无法打开 time.txt 文件！\n");
        return;
    }

    // 逐行读取文件内容
    while (fscanf(file, "%d %d %d", &project_code, &time_info, &status_code) == 3) {
        // 检查状态码是否为 0
        if (status_code == 0) {
            sort_athletes_by_score(project_code);

            char choice;
            while (1) { // 无限循环，直到用户输入有效
                printf("是否通过审核？(y/n): ");
                scanf(" %c", &choice); // 使用空格前缀清除缓冲区中的换行符

                if (choice == 'y' || choice == 'Y') {
                    writeCurrentTime(project_code, 2);
                    break; // 退出循环
                }
                else if (choice == 'n' || choice == 'N') {
                    adminDeleteScores(project_code);  // 删除对应的比赛信息
                    deleteTimeRecord(project_code);    // 删除时间信息
                    break; // 退出循环
                }
                else {
                    printf("\n无效输入！请重新输入。\n\n");
                }
            }
        }
    }
    fclose(file);
}